Pregunta 1

Intenta describir con frases entendibles el conjunto de vuelos retrasados. Intenta dar afirmaciones como por ejemplo:

Planteamiento 1:

  • El top 3 de los vuelos más lento pertenecen a las compañías US, B6 y 9E.
  • El top 3 de los vuelos más rápidos pertenecen a las compañías DL y EV.
slow.flights <- group_by(flights,carrier) %>% 
  summarise(speed = distance/ air_time * 60) %>% 
  arrange(speed)

fast.flights <- group_by(flights,carrier) %>% 
  summarise(speed = distance/ air_time * 60) %>% 
  arrange(desc(speed))

head(slow.flights, 3)
head(fast.flights, 3)
ggplot(data = slow.flights, mapping = aes(x = speed, y = carrier, col = carrier)) +
  geom_boxplot()
## Warning: Removed 9430 rows containing non-finite values (stat_boxplot).

Planteamiento 2:

  • El top 3 de los vuelos con mas distancia son de las compañia HA con 4983 Km y 342 vuelos, y la compañias UA con 4963 km con 365 vuelos y 3370 km y 8 vuelos respectivamente.
(group_by(flights, carrier, distance) %>% 
  summarise(n = n()) %>% 
  arrange(desc(distance)))[1:3,] %>% 
  ggplot(mapping = aes(x = n, y = distance, type = 21, col = carrier)) +
    geom_point(shape = 13, size = 6)
## `summarise()` has grouped output by 'carrier'. You can override using the
## `.groups` argument.

Pregunta 2

Da una versión equivalente a las pipes siguientes sin usar la función count:

not_cancelled %>% count(dest) not_cancelled %>% count(tailnum, wt = distance)

not_cancelled <- flights %>% 
  filter(!is.na(dep_delay), !is.na(arr_delay))
# not_cancelled %>% count(dest)
summarise(group_by(not_cancelled, dest), n())
# not_cancelled %>% count(tailnum, wt = distance)
summarise(group_by(not_cancelled, tailnum), n = sum(distance))

Pregunta 3

Para definir un vuelo cancelado hemos usado la función

(is.na(dep_delay) | is.na(arr_delay))

Intenta dar una definición que sea mejor, ya que la nuestra es un poco subóptima. ¿Cuál es la columna más importante?

cancelled <- flights %>% 
  filter(is.na(dep_delay) | is.na(arr_delay))
cancelled

Pregunta 4

Investiga si existe algún patrón del número de vuelos que se cancelan cada día. Investiga si la proporción de vuelos cancelados está relacionada con el retraso promedio por día en los vuelos. Investiga si la proporción de vuelos cancelados está relacionada con el retraso promedio por aeropuerto en los vuelos. ¿Qué compañía aérea sufre los peores retrasos?

Sol

Los días 8, 9 y 10 de cada mes hay mas cancelaciones de vuelos.

cancelled_prop = round(dim(cancelled)[1] / dim(flights)[1]*100,2)
cancelled_prop
## [1] 2.8
group_by(cancelled, day) %>% 
  summarise(n = n(), 
            daily_prop = round(n/sum(day)*100,2),
            mean_dep_delay = mean(dep_delay > 0, na.rm = T)) %>% 
  arrange(desc(n))
# ¿Qué compañía aérea sufre los peores retrasos?
# R: HA y MQ
(select(flights, carrier, dep_delay) %>%
  arrange(desc(dep_delay)))[1:3,]

Pregunta 5

Difícil: Intenta desentrañar los efectos que producen los retrasos por culpa de malos aeropuertos vs malas compañías aéreas. Por ejemplo, intenta usar flights %>% group_by(carrier, dest) %>% summarise(n())

flights %>% 
  group_by(carrier, dest) %>% 
  summarise(n = n()) %>% 
  arrange(desc(n))
## `summarise()` has grouped output by 'carrier'. You can override using the
## `.groups` argument.

Pregunta 6

¿Qué hace el parámetro sort como argumento de count()? ¿Cuándo puede sernos útil? Vuelve a la lista de funciones útiles para filtrar y mutar y describe cómo cada operación cambia cuando la juntamos con un group_by.

not_cancelled %>% count(dest)
# Usando sort = TRUE dentro de count ordenda de mayor a menor, 
not_cancelled %>% count(dest, sort = T)
# Combinando con group_by nos ordena el número de ocurrencias de las agrupaciones
not_cancelled %>% 
  group_by(carrier, dest) %>% 
  count(dest, sort = T)

Pregunta 7

Vamos a por los peores aviones. Investiga el top 10 de qué aviones (número de cola y compañía) llegaron más tarde a su destino.

(not_cancelled %>% 
  group_by(carrier, tailnum, arr_delay) %>% 
  count() %>% 
  arrange(desc(arr_delay)))[1:10,]

Pregunta 8

Queremos saber qué hora del día nos conviene volar si queremos evitar los retrasos en la salida. Difícil: Queremos saber qué día de la semana nos conviene volar si queremos evitar los retrasos en la salida.

not_cancelled %>% 
  ggplot(mapping = aes(x = dep_time, y = dep_delay)) +
    geom_smooth()
## `geom_smooth()` using method = 'gam' and formula 'y ~ s(x, bs = "cs")'

Del gráfico anterior podemos concluir que las horas en donde hay menos retraso sen encuentran entre las 5:00 y 7:30.

#Función para calcular día de la semana.
weekday <- function(year,month,day) {
  a = (14-month)%/%12
  y = year - a
  m = month + 12*a - 2
  d = (day + y + y%/%4 - y%/%100 + y%/%400 + (31* m)%/%12) %% 7
  return(d)
}
weekday(1988,11,27)
## [1] 0
data <- not_cancelled %>% 
  group_by(year,month, day, dep_delay) %>% 
  summarise(week.day = weekday(year, month, day)) 
## `summarise()` has grouped output by 'year', 'month', 'day', 'dep_delay'. You
## can override using the `.groups` argument.
data
data$week.day = factor(data$week.day, labels = c("sunday", "monday", 
                                                 "tuesday", "wednesday",
                                                 "thursday", "friday", "saturday"))

data

El día de la semana que hay menos cantidad de retrasos son los jueves.

ggplot(data = data)+
  geom_boxplot(mapping = aes(y = week.day, x = dep_delay, color = week.day))

Pregunta 9

Para cada destino, calcula el total de minutos de retraso acumulado. Para cada uno de ellos, calcula la proporción del total de retraso para dicho destino.

not_cancelled %>% 
  group_by(dest) %>% 
  summarise(sum_delay = sum(dep_delay)) %>% 
  arrange(desc(sum_delay))

Pregunta 10

Los retrasos suelen estar correlacionados con el tiempo. Aunque el problema que ha causado el primer retraso de un avión se resuelva, el resto de vuelos se retrasan para que salgan primero los aviones que debían haber partido antes. Intenta usar la función lag() y explora cómo el retraso de un avión se relaciona con el retraso del avión inmediatamente anterior o posterior.

Pregunta 11

Vamos a por los destinos esta vez. Localiza vuelos que llegaron ‘demasiado rápido’ a sus destinos. Segura- mente, el becario se equivocó al introducir el tiempo de vuelo y se trate de un error en los datos. Calcula para ello el cociente entre el tiempo en el aire de cada vuelo relativo al tiempo de vuelo del avión que tardó menos en llegar a dicho destino. ¿Qué vuelos fueron los que más se retrasaron en el aire?